"ui";

// 确保只声明一次
let isRunning = false;
let delayTime = 10000;
let etInput = null;

ui.layout(
    <vertical padding="16">
        <button id="startButton" text="启动脚本并打开应用" w="*" h="50" />
        <button id="stopButton" text="停止脚本" w="*" h="50" />
        <text id="statusText" text="当前状态：等待启动" textSize="16sp" textColor="#000000" />
    </vertical>
);

// 启动脚本逻辑
function startScript() {
    if (isRunning) {
        toast("脚本已经在运行中！");
        return;
    }

    isRunning = true;
    ui.run(() => {
        ui.statusText.setText("当前状态：脚本运行中...");
    });

    threads.start(function () {
        try {
            let packageName = "com.ddnews.newmediaruzhou"; // 替换为目标应用的名称
            if (app.launchPackage(packageName)) {
                // toast("正在打开应用：" + appName);/
                sleep(delayTime); // 等待应用启动完成
            } else {
                toast("未找到应用：" + appName);
                isRunning = false;
                ui.run(() => {
                    ui.statusText.setText("当前状态：应用打开失败！");
                });
                return;
            }

            clickOnMyButton()
        } catch (e) {
            console.error(e);
            ui.run(() => {
                ui.statusText.setText("当前状态：脚本异常停止！");
            });
        }
    });
}

//点击我的按钮
function clickOnMyButton() {
    sleep(delayTime); // 模拟任务间隔
    let result = 等待控件出现('顶端汝州控件...', 'ivTopIcon')
    if (result) {
        // 查找目标控件
        let myButton = id("view_tab_text").className("android.widget.TextView").text("我的").findOne(5000);
        if (myButton) {
            // 获取控件的坐标范围
            let bounds = myButton.bounds();
            if (bounds) {
                // 模拟点击控件的中心点
                click(bounds.centerX(), bounds.centerY());
                toast("成功点击 '我的' 按钮！");
                myAttention()
            }
        }
    }

}

//点击我的关注
function myAttention() {
    sleep(delayTime); // 模拟任务间隔
    let result = 等待控件出现('关注控件...', 'tvFollowNum')
    if ( result ) {
        id("ll_follow").findOne().click()
        toast("成功点击 '关注' 按钮！");
        sleep(delayTime); // 模拟任务间隔
        关注的人()
    }

}

function 重登检测() {
    if (text("账号密码登录").clickable().exists() || text("验证码登录").clickable().exists()) {
        log("存在账号密码登录或者验证码登录")
        // loginAccount();
        return true;
    }
    return false;
}

function 对比数组(myArray, targetValue) {
    // Iterate through the array
    for (var i = 0; i < myArray.length; i++) {
        if (myArray[i] === targetValue) {
            // Value found
            isValueFound = true;
            return true; // Exit the loop since you found what you were looking for
        }
    }
    return false;
}


function 判断是否到关注页() {
    let maxRetries = 20; // 最大尝试次数，避免死循环
    let retryCount = 0;
    while (retryCount < maxRetries) {
        let target = id("cb_follow").findOne(1000); // 每次查找等待1秒
        if (target) {
            toast("已到达关注页面");
            sleep(delayTime);
            break; // 找到目标控件后退出循环
        } else {
            toast("未达关注页面，继续返回...");
            retryCount++;
            back();
            sleep(delayTime); // 等待0.5秒再进行下一次查找
        }
    }

    if (retryCount >= maxRetries) {
        console.log("查找控件超时，未能找到目标控件");
    }
};

function 等待控件出现(controlName, controlId) {
    sleep(delayTime); // 初始延迟
    let startTime = Date.now();
    let timeout = 50000
    sleep(delayTime); // 初始延迟

    while (Date.now() - startTime < timeout) {
        let imgHeader = id(controlId).findOne(delayTime); // 查找控件
        toast(`等待控件 ${controlName} 出现...`);
        if (imgHeader) {
            toast("控件已出现，执行后续操作...");
            return true; // 找到控件，返回 true
        }
        sleep(delayTime); // 等待下次检查
    }

    toast("等待超时，控件未出现 准备重新启动");
    killApp('com.ddnews.newmediaruzhou')
    return false; // 超时未找到控件，返回 false
}
function safeSleep(totalTime) {
    const interval = 500; // 每次暂停500毫秒
    let elapsed = 0;
    while (elapsed < totalTime) {
        sleep(interval);
        elapsed += interval;
        toast('等待中....')
    }
}



var myArray = [];
function 关注的人() {
    sleep(delayTime); // 模拟任务间隔
    var 分享的次数 = 1;
    var 不是全部重复 = false;
    let r = 等待控件出现('关注页面','cb_follow')
    if ( r ) {
        while (true) {
            var ygz = id("tv_name").visibleToUser().find();  // 获取当前页的所有关注人

            // 如果没有关注人，表示没有更多了，结束循环
            if (ygz.length === 0) {
                toast("没有更多关注的人！");
                break;
            }

            // 处理当前页显示的所有关注人
            for (i = 0; i < ygz.length; i++) {
                console.log('名字',JSON.stringify(ygz[i].text()));
                登录次数 = 0;
                sleep(delayTime);
                if (!对比数组(myArray, ygz[i].text())) {
                    // if (重登检测()) {
                    //     break;
                    // }
                    myArray.push(ygz[i].text());
                    sleep(delayTime);
                    let target = ygz[i];  // 获取当前目标元素
                    // 确保 target 存在，并且父元素存在
                    if (target) {
                        let parent1 = target.parent();
                        if (parent1) {
                            let parent2 = parent1.parent();
                            if (parent2) {
                                parent2.click();  // 执行点击
                            } else {
                                console.log("第二层父元素不存在");
                                killApp('com.ddnews.newmediaruzhou')
                            }
                        } else {
                            console.log("第一层父元素不存在");
                            killApp('com.ddnews.newmediaruzhou')
                        }
                    } else {
                        console.log("目标元素不存在");
                        killApp('com.ddnews.newmediaruzhou')
                    }

                    var myar2 = [];
                    var 文章1 = 0;
                    do {
                        sleep(delayTime);
                        var 文章 = id("news_title").find();
                        if (文章.length > 0) {
                            // 只处理第一篇文章
                            sleep(delayTime);
                            if (!对比数组(myar2, 文章[0].text())) {
                                文章[0].parent().click();

                                sleep(delayTime);
                                if (!text("已关注").visibleToUser().findOne(delayTime)) {
                                    back();
                                    sleep(delayTime);
                                    back();
                                    sleep(delayTime);
                                    break
                                }
                            }
                            sleep(delayTime);
                            myar2.push(文章[0].text());
                            log('文章标题',文章[0].text())
                            // log(文章[0].text());
                            //暂停30秒
                            toast("等待30秒");

                            调用ai(文章[0].text())
                            // safeSleep(30000); // 等效于 sleep(30000)

                            // asyncSleep(30000, () => {
                            //     toast("等待中...")
                            // });
                            for (let i = 0; i <= 30; i++) {
                                toast("等待中，当前计数：" + i);
                                sleep(1000); // 每次等待 10 秒
                            }
                            // 模拟点赞、收藏、评论等操作
                            sleep(delayTime);
                            let r = 等待控件出现('点赞','cb_like')
                            if ( r ) {
                                id('cb_like').selected(false).clickable().visibleToUser().findOne(delayTime) && id('cb_like').selected(false).clickable().visibleToUser().findOne(delayTime).click();
                            }

                            sleep(delayTime);
                            let r1 = 等待控件出现('收藏','cb_like')
                            if (r1) {
                                id("cb_collection").checked(false).visibleToUser().findOne(2000) && id("cb_collection").checked(false).visibleToUser().findOne(delayTime).click();
                            }

                            sleep(delayTime);
                            if (id("tv_comment").clickable().visibleToUser().findOne(delayTime)) {
                                id("tv_comment").clickable().visibleToUser().findOne(delayTime).click();
                                id('etInput').setText(etInput)

                                if (text("AI生成评论").visibleToUser().findOne(delayTime)) {

                                    // text("AI生成评论").clickable().visibleToUser().findOne(delayTime).click();
                                    sleep(delayTime);
                                    text("发布").clickable().visibleToUser().findOne(delayTime).click();
                                    sleep(6000);
                                    toast('评论完开始返回！')
                                    判断是否到关注页()
                                } else {
                                    判断是否到关注页()
                                }
                            }
                            break; // 处理完第一篇文章后跳出循环
                        } else {
                            sleep(delayTime);
                            back();
                            break; // 处理完第一篇文章后跳出循环
                        }
                    } while (!text("已经全部加载完毕").exists());
                }
            }

            // 如果当前页显示的关注人少于 8，说明没有更多关注人了，停止加载
            if (ygz.length < 8) {
                toast("当前页面显示的关注人已全部处理完！");
                break;
            }

            // 上拉加载更多
            if (!text("已经全部加载完毕").exists()) {
                gesture(500, [device.width / 2, device.height * 0.8], [device.width / 2, device.height * 0.4]); // 模拟从屏幕中间向上滑动的手势
                sleep(20000);  // 等待加载完
                gesture(500, [device.width / 2, device.height * 0.4], [device.width / 2, device.height * 0.2]);  // 模拟从屏幕中间向上滑动的手势
                sleep(20000);  // 等待加载完
            } else {
                toast("当前页面显示的关注人已全部处理完！");
                break;
            }
        }
    }

}


function killApp(appName) {
    //填写包名或app名称都可以
    var name = getPackageName(appName); //通过app名称获取包名
    if (!name) {
        //如果无法获取到包名，判断是否填写的就是包名
        if (getAppName(appName)) {
            name = appName; //如果填写的就是包名，将包名赋值给变量
        } else {
            return false;
        }
    }
    app.openAppSetting(name); //通过包名打开应用的详情页(设置页)
    text(app.getAppName(name)).waitFor(); //通过包名获取已安装的应用名称，判断是否已经跳转至该app的应用设置界面
    sleep(delayTime); //稍微休息一下，不然看不到运行过程，自己用时可以删除这行
    let is_sure = textMatches(/(.*强.*|.*停.*|.*结.*)/).visibleToUser().findOne(delayTime); //在app的应用设置界面找寻包含“强”，“停”，“结”，“行”的控件
    if (is_sure.enabled()) {
        //判断控件是否已启用（想要关闭的app是否运行）
        sleep(delayTime);
        is_sure.parent().click(); //结束应用的控件如果无法点击，需要在布局中找寻它的父控件，如果还无法点击，再上一级控件，本案例就是控件无法点击
        sleep(delayTime);
        is_sure.click();
        sleep(delayTime);
        textMatches(/(.*强.*|.*停.*|.*结.*)/).visibleToUser().findOne(delayTime);
        var n = textMatches(/(.*强.*|.*停.*|.*结.*)/).find();
        if (n.length > 1) {
            n[n.length - 1].click();
            n[n.length - 1].parent() && n[n.length - 1].parent().click();
        }
        sleep(delayTime);
        if (textMatches(/(.*确.*|.*定.*)/).visibleToUser().findOne(delayTime)) {
            textMatches(/(.*确.*|.*定.*)/).visibleToUser().findOne(delayTime).click();
        } else {
            var 确认 = textMatches(/(.*确.*|.*定.*|.*强.*)/).visibleToUser().findOne(delayTime);
            if (确认) {
                确认.click(); //需找包含“确”，“定”的控件
                sleep(delayTime);
                确认.parent().click();
            }
        }
        log(app.getAppName(name) + "应用已被关闭");
        sleep(delayTime);
        stopScript()
        sleep(delayTime);
        toast('开始重启脚本...')
        startScript();
        // back();
    } else {
        log(app.getAppName(name) + "应用不能被正常关闭或不在后台运行");
        back();
    }
}


//调用ai
function 调用ai(content){
    var dpsk_api_key="sk-906c9c52e47f412f8067a5a148e6956b"
    var dpsk_base_url="https://api.deepseek.com/v1/chat/completions"
    headers = {
        "Authorization": "Bearer " + dpsk_api_key,
        "Content-Type": "application/json"
    }
    data = {
        "model": "deepseek-chat",
        "messages": [
            { "role": "system", "content": "You are a helpful assistant." },
            { "role": "user", "content": `${content},请你根据这一段话生成纯文本的网友评论(重点只能是纯文本不能超出10个字数，不带任何标点符号)` }
        ],
        "stream": false
    }

    let response=http.postJson(dpsk_base_url, data, {
            headers: headers
        }
    );

    // 处理响应
    if (response.statusCode == 200) {
        var result = response.body.json();
        log("API调用成功，返回结果：");
        log(result["choices"][0]["message"]["content"]);
        sleep(delayTime);
        etInput = result["choices"][0]["message"]["content"]
    } else {
        log("API调用失败，状态码：" + response.statusCode);
        log("响应内容：" + response.body.string());
    }
};


// 停止脚本逻辑
function stopScript() {
    if (!isRunning) {
        toast("脚本未运行！");
        return;
    }

    isRunning = false;
    ui.run(() => {
        ui.statusText.setText("当前状态：脚本已停止");
    });
}

// 按钮事件绑定
ui.startButton.on("click", () => {
    startScript();
});

ui.stopButton.on("click", () => {
    stopScript();
});
